package cs2114.antiFingerMines;

import java.util.Observable;


/**
 * // -------------------------------------------------------------------------
/**
 *  This is are interface with the features (methods) that must be
 *  implemented by the AntiFingerMine model.
 *
 *  @author Blake Whaley
 *  @author Graham McLaughlin (gjm1324)
 *  @author William Vuong (wnvuong)
 *  @version Apr 9, 2012
 */
public abstract class AntiFingerMineAbstract
    extends Observable
{
    protected Mine[] field;
    protected float viewWidth;
    protected float viewHeight;
    protected Location finger;
    protected int numMines;
    protected boolean status;
    
    //This is the y-location where the mines can begin being place anything 
    // less than this number is "safe"
    protected float startOfField;
    protected float endOfField;
    
    protected float spaceForMine;

    public AntiFingerMineAbstract()
    {

    }

	public abstract Location getFingerLocation();

	public abstract void setFingerLocation(float x, float y);

	/**
	 * This is the method that places all of the mines in our data structure
	 * and resets any other variables in order to begin a new game.
	 */
	public abstract void newGame(float w, float h, int mines);

	/**
	 * I meant to make this private but it cannot be in an interface. This
	 * method should only be called in the constructor to establish the width
	 * of the view.
	 * @param w the view's width
	 */
	public abstract void setWidth(float w);

	/**
	 * same as width but height.
	 * @param h the view's height.
	 */
	public abstract void setHeight(float h);

	/** This is our key algorithm that will be responsible for placing all of
	 * the mines and setting their radiuses. It will most likely be called in
	 * newGame().
	 */
	public abstract void setRandomMines();



}
